package com.chwn.curiousdiary.api;

import com.chwn.curiousdiary.bean.MessageBean;
import com.chwn.curiousdiary.bean.MessageDetailBean;
import com.chwn.curiousdiary.bean.RegisterBean;
import com.chwn.curiousdiary.gloable.User;
import com.chwn.harulib.mvp.rx.HttpResult;

import java.util.List;

import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
import rx.Observable;

/**
 * Created by Myshikin on 2017/3/31.
 * desc: 用户操作接口
 */
public interface IUserApi {

    /**
     * 用户登录
     * 微信头像	headUrl	string	微信登录时传入
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 手机号	phone	string
     * 登录方式	loginWay	number	(1 手机号 2 微信)目前只支持手机号&微信登录
     * 推送使用	jPushId	string
     * 微信授权	openId	string	微信登录时传入
     * 密码	passWord	string
     * 微信昵称	nickName	string	微信登录时传入
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/login.action")
    Observable<HttpResult<List<User>>> userLogin(
            @Field("phone") String phone,
            @Field("passWord") String passWord,
            @Field("loginWay") int loginWay,
            @Field("jPushId") String jPushId,
            @Field("openId") String openId,
            @Field("unionid") String unionid,
            @Field("osType") int osType,
            @Field("nickName") String nickName,
            @Field("headUrl") String headUrl
    );


    /**
     * 绑定手机
     * 手机号	phone	string
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 密码	passWord	string
     * 验证码	smsCode	number
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/bindPhone.action")
    Observable<HttpResult<List<User>>> userBindPhone(
            @Field("phone") String phone,
            @Field("passWord") String passWord,
            @Field("unionid") String unionid,
            @Field("osType") int osType,
            @Field("smsCode") int smsCode
    );


    /**
     * 忘记密码
     * 验证码	smsCode	number
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 密码	passWord	string
     * 手机号	phone	string
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/editUserPassword.action")
    Observable<HttpResult<Object>> editUserPassword(
            @Field("phone") String phone,
            @Field("passWord") String passWord,
            @Field("osType") int osType,
            @Field("smsCode") int smsCode
    );

    /**
     * 用户注册
     * 密码	passWord	string
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 验证码	smsCode	number
     * 手机号	phone	string
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/register.action")
    Observable<HttpResult<List<User>>> userRegister(
            @Field("phone") String phone,
            @Field("passWord") String passWord,
            @Field("osType") int osType,
            @Field("smsCode") int smsCode
    );


    /**
     * 获取用户消息
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 用户标识	userToken	string	登录用户专享
     * 当前页码	nowPage	number
     * 获取条数	pageRecords	number
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/getMessageList.action")
    Observable<HttpResult<List<MessageBean>>> getMessageList(
            @Field("nowPage") int nowPage,
            @Field("userToken") String userToken,
            @Field("osType") int osType,
            @Field("pageRecords") int pageRecords
    );

    /**
     * 获取消息详情
     * 用户标识	userToken	string	登录用户专享
     * 消息Id	messageId	string
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/getMessageDetail.action")
    Observable<HttpResult<MessageDetailBean>> getMessageDetail(

    );

    /**
     * 发送验证码
     * @return
     */
    @FormUrlEncoded
    @POST("app/sys/sendSms.action")
    Observable<HttpResult<List<RegisterBean>>> sendSms(
            @Field("phone") String phone,
            @Field("osType") int osType,
            @Field("verifyType") int verifyType,
            @Field("unionid") String unionid

    );

    /**
     * 上传宝宝信息
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/uploadBabyFeature.action")
    Observable<HttpResult<Object>> upLoadBabyinfo(
            @Field("phone") String phone,
            @Field("babybirth") String babybirth,
            @Field("babysex") int babysex,
            @Field("unionid") String unionid
    );

    /**
     * 消息已读
     * 标识 Android&iOS	osType	number	(1 Android 2 iOS)
     * 用户标识	userToken	string	登录用户专享
     * 消息Id	messageId	string
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/readMessage.action")
    Observable<HttpResult<Object>> readMessage(
            @Field("messageId") String messageId,
            @Field("userToken") String userToken,
            @Field("osType") int osType
    );

    /**
     * 用户点赞操作
     * @param storyId
     * @param userToken
     * @param osType
     * @param praise
     * @return
     */
    @FormUrlEncoded
    @POST("app/story/praiseStory.action")
    Observable<HttpResult<Object>> praiseStory(
            @Field("storyId") String storyId,
            @Field("userToken") String userToken,
            @Field("osType") int osType,
            @Field("praise") int praise
    );

    /**
     * 用户收藏操作
     * @param storyId
     * @param userToken
     * @param osType
     * @param collect
     * @return
     */
    @FormUrlEncoded
    @POST("app/story/collectStory.action")
    Observable<HttpResult<Object>> collectionStory(
            @Field("storyId") String storyId,
            @Field("userToken") String userToken,
            @Field("osType") int osType,
            @Field("collect") int collect
    );

    @FormUrlEncoded
    @POST("app/story/downloadStory.action")
    Observable<HttpResult<Object>> downloadStory(
            @Field("storyId") String storyId,
            @Field("userToken") String userToken,
            @Field("osType") int osType
    );

}
